﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace prjCompras
{
    public partial class frmCadFornecedor : FormCadastroPadrao.FormCadastro
    {
        public frmCadFornecedor()
        {
            InitializeComponent();

            loadDados();

            this.tabela = ConstTabelas.FORNECEDOR;
        }

        private void frmCadFornecedor_Load(object sender, EventArgs e)
        {
            //cmbxEstado.SelectedIndex = 0;
        }

        private void loadDados()
        {
            Dados codigo = new Dados("CNPJ", mskdtxtbxCNPJFornecedor.Name, false, false, Dados.tipo.texto, "CNPJ");
            Dados nome = new Dados("Nome", txtbxNome.Name, false, false, Dados.tipo.texto, "Nome");
            Dados nomeFantasia = new Dados("NomeFantasia", txtbxNomeFantasia.Name, false, false, Dados.tipo.texto, "Nome Fantasia");
            Dados logradouro = new Dados("Logradouro", txtbxLogradouro.Name, false, false, Dados.tipo.texto, "Logradouro");
            Dados Bairro = new Dados("Bairro", txtbxBairro.Name, false, false, Dados.tipo.texto, "Bairro");
            Dados Cidade = new Dados("Cidade", txtbxCidade.Name, false, false, Dados.tipo.texto, "Cidade");
            Dados UF = new Dados("UF", cmbxEstado.Name, false, false, Dados.tipo.texto, "UF");
            Dados CEP = new Dados("CEP", mskdtxtbxCEP.Name, false, false, Dados.tipo.texto, "CEP");
            Dados Email = new Dados("Email", txtbxEmail.Name, false, false, Dados.tipo.texto, "E-mail");
            Dados obs = new Dados("Obsevacao", txtbxObservacao.Name, true, false, Dados.tipo.texto, "Observação");
            Dados situacao = new Dados("Situacao", chckbxSituacao.Name, false, false, Dados.tipo.numero, "Ativo");
            Dados resultado = new Dados("Resultado", txtbxResultado.Name, true, false, Dados.tipo.texto, "Resultado");

            this.campos = new List<Dados>();

            this.campos.Add(codigo);
            this.campos.Add(nome);
            this.campos.Add(nomeFantasia);
            this.campos.Add(logradouro);
            this.campos.Add(Bairro);
            this.campos.Add(Cidade);
            this.campos.Add(UF);
            this.campos.Add(CEP);
            this.campos.Add(Email);
            this.campos.Add(obs);
            this.campos.Add(situacao);
            this.campos.Add(resultado);
        }

        public static bool IsCnpj(string cnpj)
        {
            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int soma;
            int resto;
            string digito;
            string tempCnpj;
            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
            if (cnpj.Length != 14)
            {
                return false;
            }
            tempCnpj = cnpj.Substring(0, 12);
            soma = 0;
            for (int i = 0; i < 12; i++)
            {
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];
            }
            resto = (soma % 11);
            if (resto < 2)
            {
                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }
            digito = resto.ToString();
            tempCnpj = tempCnpj + digito;
            soma = 0;
            for (int i = 0; i < 13; i++)
            {
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];
            }
            resto = (soma % 11);
            if (resto < 2)
            {
                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }
            digito = digito + resto.ToString();
            return cnpj.EndsWith(digito);
        }

        public override bool validacaoAdicional()
        {
            if (!IsCnpj(mskdtxtbxCNPJFornecedor.Text))
            {
                mskdtxtbxCNPJFornecedor.Focus();
                MessageBox.Show("CNPJ informado inválido!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }

            if (!mskdtxtbxCEP.MaskCompleted)
            {
                mskdtxtbxCEP.Focus();
                MessageBox.Show("Informe todos os dígitos do CEP!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }

            decimal v1;
            try
            {
                v1 = Convert.ToDecimal(txtbxValor.Text.Replace(",", "."));
            }
            catch
            {
                MessageBox.Show("Campo valor não é número!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            decimal v2;
            try
            {
                v2 = Convert.ToDecimal(mskdtxtbxCEP.Text);
            }
            catch
            {
                MessageBox.Show("Campo CEP não é número!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            decimal total = 0;

            try
            {
                total = v2 / v1;
            }
            catch
            {
                MessageBox.Show("Erro calculando total!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            int i = 0;
           
            i = total.ToString().IndexOf(",");
            if (i != -1)
            {
                txtbxResultado.Text = total.ToString().Substring(1, i);
            }
            else
            {
                txtbxResultado.Text = total.ToString();
            }
            
            txtbxResultado.Text = txtbxResultado.Text.Replace(",", ".");
            return true;
        }

        private void txtbxValor_MouseDown(object sender, MouseEventArgs e)
        {
        }

        private void txtbxValor_KeyDown(object sender, KeyEventArgs e)
        {/*
            if ((e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) || e.KeyCode != Keys.Back || e.KeyCode != Keys.Delete || e.KeyCode != Keys.Decimal)
            {
                e.SuppressKeyPress = true;
            }*/
        }
    }
}
